﻿/* 初始化开始*/
var forbidButtonsListener=function(){
  if($.ligerui){
    if(!window.top.forbidButtons&&window.location.pathname.lastIndexOf('login.html')<0){
      window.top.forbidButtons=eval(common.ajax('getForbidButtons.do',null,true));
    }
    if(window.top.forbidButtons){
      var contextPath=common.contextPath.substring(0,common.contextPath.length-1);
      for(var i=0;i<window.top.forbidButtons.length;i++){
        var menu=window.top.forbidButtons[i];
        if(window.location.pathname==contextPath+menu.url){
          for(var j=0;j<menu.children.length;j++){
            var buttonId=menu.children[j].extId;
            var forbitBtn=$.ligerui.get(buttonId);
            if(forbitBtn)
              forbitBtn.setDisabled();
            else{
              $('#'+buttonId).attr('disabled','true').addClass('btn-disabled');
            }
          }
        }
      }
    }
  }
}

if(document.attachEvent)
  window.attachEvent("onload",forbidButtonsListener);
else if(document.addEventListener)
  window.addEventListener("load",forbidButtonsListener,false);
else
  $(document).on('afterReady',forbidButtonsListener).off('afterReady');

/*JQuery初始化*/
(function($){
  // 全局事件
  $(".l-dialog-btn").live('mouseover',function(){
    $(this).addClass("l-dialog-btn-over");
  }).live('mouseout',function(){
    $(this).removeClass("l-dialog-btn-over");
  });
  $(".l-dialog-tc .l-dialog-close").live('mouseover',function(){
    $(this).addClass("l-dialog-close-over");
  }).live('mouseout',function(){
    $(this).removeClass("l-dialog-close-over");
  });
  // 搜索框 收缩/展开
  $(".searchtitle .togglebtn").live('click',function(){
    if($(this).hasClass("togglebtn-down"))
      $(this).removeClass("togglebtn-down");
    else
      $(this).addClass("togglebtn-down");
    var searchbox=$(this).parent().nextAll("div.searchbox:first");
    searchbox.toggle();
  });
})(jQuery);
/* 初始化结束*/

var common={};

common.ajax=function(url,params,isCache){
  var result=null;
  $.ajax({
    url:url,
    cache:isCache||false,
    data:params,
    async:false,
    success:function(res){
      result=res;
    },
    complete:function(xhr,textStatus){
      /*if(xhr.readyState=="4"){
        alert(xhr.responseText);
      }*/
      xhr=null;
    },
    error:function(xhr,textStatus,errorThrown){
      // $("#ajaxMessage").text($(this).text()+" out!")
      alert("ajax error:"+textStatus);
      xhr=null;
    }
  });
  return result;
};

common.getContextName=function(){
  if(common.contextPath)
    return common.contextPath;
  if(top.common.contextPath){
    common.contextPath=top.common.contextPath;
  }else{
    top.common.contextPath=common.ajax('ajaxContextPath.do',null,true);
    common.contextPath=top.common.contextPath;
  }
  return common.contextPath;
}

common.contextPath=common.getContextName();

// 获取QueryString的数组
function getQueryString(){
  var result=location.search.match(new RegExp("[\?\&][^\?\&]+=[^\?\&]+","g"));
  if(result==null){
    return "";
  }
  for(var i=0;i<result.length;i++){
    result[i]=result[i].substring(1);
  }
  return result;
}
// 根据QueryString参数名称获取值
function getQueryStringByName(name){
  var result=location.search.match(new RegExp("[\?\&]"+name+"=([^\&]+)","i"));
  if(result==null||result.length<1){
    return "";
  }
  return result[1];
}
// 根据QueryString参数索引获取值
function getQueryStringByIndex(index){
  if(index==null){
    return "";
  }
  var queryStringList=getQueryString();
  if(index>=queryStringList.length){
    return "";
  }
  var result=queryStringList[index];
  var startIndex=result.indexOf("=")+1;
  result=result.substring(startIndex);
  return result;
}

window.LG={};
LG.tip=function(message){
  if(LG.wintip){
    LG.wintip.set('content',message);
    LG.wintip.show();
  }else{
    LG.wintip=$.ligerDialog.tip({
      content:message
    });
  }
  setTimeout(function(){
    LG.wintip.hide()
  },4000);
};
// 预加载图片
LG.prevLoadImage=function(rootpath,paths){
  for(var i in paths){
    $('<img />').attr('src',rootpath+paths[i]);
  }
};
// 显示loading
LG.showLoading=function(message){
  message=message||"正在加载中...";
  $('body').append("<div class='jloading'>"+message+"</div>");
  $.ligerui.win.mask();
};
// 隐藏loading
LG.hideLoading=function(message){
  $('body > div.jloading').remove();
  $.ligerui.win.unmask({
    id:new Date().getTime()
  });
}
// 显示成功提示窗口
LG.showSuccess=function(message,callback){
  if(typeof(message)=="function"||arguments.length==0){
    callback=message;
    message="操作成功!";
  }
  $.ligerDialog.success(message,'提示信息',callback);
};
// 显示失败提示窗口
LG.showError=function(message,callback){
  if(typeof(message)=="function"||arguments.length==0){
    callback=message;
    message="操作失败!";
  }
  $.ligerDialog.error(message,'提示信息',callback);
};

// 快速设置表单底部默认的按钮:保存、取消
LG.setFormDefaultBtn=function(cancleCallback,savedCallback){
  // 表单底部按钮
  var buttons=[];
  if(cancleCallback){
    buttons.push({
      text:'取消',
      onclick:cancleCallback
    });
  }
  if(savedCallback){
    buttons.push({
      text:'保存',
      onclick:savedCallback
    });
  }
  LG.addFormButtons(buttons);
};

// 增加表单底部按钮,比如：保存、取消
LG.addFormButtons=function(buttons){
  if(!buttons)
    return;
  var formbar=$("body > div.form-bar");
  if(formbar.length==0)
    formbar=$('<div class="form-bar"><div class="form-bar-inner"></div></div>').appendTo('body');
  if(!(buttons instanceof Array)){
    buttons=[buttons];
  }
  $(buttons).each(function(i,o){
    var btn=$('<div class="l-dialog-btn"><div class="l-dialog-btn-l"></div><div class="l-dialog-btn-r"></div><div class="l-dialog-btn-inner"></div></div> ');
    $("div.l-dialog-btn-inner:first",btn).html(o.text||"BUTTON");
    if(o.onclick){
      btn.bind('click',function(){
        o.onclick(o);
      });
    }
    if(o.width){
      btn.width(o.width);
    }
    $("> div:first",formbar).append(btn);
  });
};

// 填充表单数据
LG.loadForm=function(mainform,options,callback){
  options=options||{};
  if(!mainform)
    mainform=$("form:first");
  var p=$.extend({
    beforeSend:function(){
      LG.showLoading('正在加载表单数据中...');
    },
    complete:function(){
      LG.hideLoading();
    },
    success:function(data){
      mainform.ligerForm().setValues(data);
       if(callback)
        callback(data);
    },
    error:function(message){
      LG.showError('数据加载失败!<BR>错误信息：'+message);
    }
  },options);
  LG.ajax(p);
};

// 带验证、带loading的提交
LG.submitForm=function(mainform,success,error){
  if(window.KindEditor){
    $.each(KindEditor.instances,function(index,item){
      item.sync();
    });
  }
  if(!mainform)
    mainform=$("form:first");
  if(mainform.valid()){
    mainform.ajaxSubmit({
      dataType:'json',
      beforeSubmit:function(formData,jqForm,options){
        // 针对复选框和单选框 处理
        $(":checkbox,:radio",jqForm).each(function(){
          if(!existInFormData(formData,this.name)){
            formData.push({
              name:this.name,
              type:this.type,
              value:this.checked
            });
          }
        });
        for(var i=0,l=formData.length;i<l;i++){
          var o=formData[i];
          if(o.type=="checkbox"||o.type=="radio"){
            o.value=$("[name="+o.name+"]",jqForm)[0].checked?"true":"false";
          }
        }
      },
      beforeSend:function(a,b,c){
        LG.showLoading('正在保存数据中...');
        
      },
      complete:function(){
        LG.hideLoading();
      },
      success:success||function(res){
        if(!res.success){
          window.top.LG.showError('错误:'+res.msg);
        }else{
          window.top.LG.showSuccess(res.msg||'保存成功',function(){
            LG.closeCurrentTabAndReloadGrid();
          });
        }
      },
      error:error||function(result){
        LG.tip('发现系统错误 <BR>错误码：'+result.status);
      }
    });
  }else{
    LG.showInvalid();
  }
  function existInFormData(formData,name){
    for(var i=0,l=formData.length;i<l;i++){
      var o=formData[i];
      if(o.name==name)
        return true;
    }
    return false;
  }
};

// 提示 验证错误信息
LG.showInvalid=function(validator){
  validator=validator||LG.validator;
  if(!validator)
    return;
  var message='<div class="invalid">存在'+validator.errorList.length+'个字段验证不通过，请检查!</div>';
  // top.LG.tip(message);
  $.ligerDialog.error(message);
};

// 表单验证
LG.validate=function(form,options){
  if(typeof(form)=="string")
    form=$(form);
  else if(typeof(form)=="object"&&form.NodeType==1)
    form=$(form);
  
  options=$.extend({
    errorPlacement:function(lable,element){
      if(!element.attr("id"))
        element.attr("id",new Date().getTime());
      if(element.hasClass("l-textarea")){
        element.addClass("l-textarea-invalid");
      }else if(element.hasClass("l-text-field")){
        element.parent().addClass("l-text-invalid");
      }
      $(element).removeAttr("title").ligerHideTip();
      $(element).attr("title",lable.html()).ligerTip({
        distanceX:5,
        distanceY:-3,
        auto:true
      });
    },
    success:function(lable){
      if(!lable.attr("for"))
        return;
      var element=$("#"+lable.attr("for"));
      
      if(element.hasClass("l-textarea")){
        element.removeClass("l-textarea-invalid");
      }else if(element.hasClass("l-text-field")){
        element.parent().removeClass("l-text-invalid");
      }
      $(element).removeAttr("title").ligerHideTip();
    }
  },options||{});
  LG.validator=form.validate(options);
  return LG.validator;
};

// 提交服务器请求, 返回json格式
// 1,提交给类 options.type 方法 options.method 处理
// 2,并返回 AjaxResult(这也是一个类)类型的的序列化好的字符串
LG.ajax=function(options){
  var p=options||{};
  $.ajax({
    cache:false,
    async:true,
    url:p.url,
    data:p.data,
    dataType:'json',
    type:p.type||'get',
    beforeSend:function(){
      LG.loading=true;
      if(p.beforeSend)
        p.beforeSend();
      else
        LG.showLoading(p.loading||'正在处理中...');
    },
    success:function(res){
      if(!res)
        return;
      if(res.success===false&&res.msg){
        p.error(res.msg);
      }else{
        p.success(res,res.msg);
      }
    },
    complete:function(xhr,textStatus){
      xhr=null;
      LG.loading=false;
      if(p.complete)
        p.complete();
      else
        LG.hideLoading();
    },
    error:function(xhr,textStatus,errorThrown){
      LG.tip('发现系统错误 <BR>错误码：'+xhr.status);
      xhr=null;
    }
  });
};

// 关闭当前显示的Tab项
LG.closeCurrentTab=function(){
  window.top.topTabFolder.removeSelectedTabItem();
};

LG.closeCurrentTabAndReloadGrid=function(){
  // "user",'maingrid'
  var parentTabId=getQueryStringByName('parentTabId');
  var parentGridId=getQueryStringByName('parentGridId')||'main_grid';
  window.top.LG.closeAndReloadGrid(parentTabId,parentGridId);
}
// 关闭当前Tab项并且刷新父窗口
LG.closeAndReloadGrid=function(parentTabId,parentGridId){
  if(window!=window.top){
    window.top.LG.closeAndReloadParent(parentTabId,parentGridId);
  }else{
    LG.closeCurrentTab();
    var iframe=window.top.frames[parentTabId];
    window.top.topTabFolder.selectTabItem(parentTabId);
    iframe.$('#'+parentGridId).ligerGrid().reload();
  }
};

LG.deleteRecords=function(grid,deleteUrl){
  var selectedRow=grid.getSelected();
  if(!selectedRow){
    LG.tip('!请选择记录');
    return
  }
  var deleteIds=sdk.arrayutils.getFieldStr(grid.getSelectedRows(),grid.options.pkName);
  $.ligerDialog.confirm('确定删除吗?',function(confirm){
    if(confirm)
      $.ajax({
        url:deleteUrl,
        dataType:"json",
        cache:false,
        data:{
          ids:deleteIds
        },
        async:false,
        complete:function(xhr,ts){
          xhr=null;
        },
        success:function(res){
          if(res.success){
            LG.showSuccess(res.msg||'删除成功');
            grid.reload();
          }else{
            LG.showError(res.msg);
          }
        },
        error:function(xhr){
          if(xhr.responseText){
            $.ligerDialog.open({
              height:480,
              content:xhr.responseText,
              width:800
            });
          }
          xhr=null;
        }
      });
  });
}

LG.batchRecords=function(grid,submitUrl,operationDesc,successCallBack){
  var selectedRow=grid.getSelected();
  if(!selectedRow){
    LG.tip('!请先选择'+(operationDesc||'')+'记录');
    return
  }
  var selectIds=sdk.arrayutils.getFieldStr(grid.getSelectedRows(),grid.options.pkName);
  $.ligerDialog.confirm('确定'+(operationDesc||'')+'提交吗?',function(confirm){
    if(confirm)
      $.ajax({
        url:submitUrl,
        dataType:"json",
        cache:false,
        data:{
          ids:selectIds
        },
        async:false,
        success:function(res){
          if(res.success){
            LG.showSuccess(res.msg);
            grid.reload();
            if(successCallBack){
              successCallBack();
            }
          }else{
            LG.showError(res.msg);
          }
        },
        complete:function(xhr,ts){
          xhr=null;
        },
        error:function(obj){
          if(obj.responseText){
            $.ligerDialog.open({
              height:480,
              content:obj.responseText,
              width:800
            });
          }
        }
      });
  });
}

LG.loadToolbar=function(grid,toolbarBtnItemClick){
  var MenuNo=LG.getPageMenuNo();
  LG.ajax({
    loading:'正在加载工具条中...',
    type:'AjaxSystem',
    method:'GetMyButtons',
    data:{
      HttpContext:true,
      MenuNo:MenuNo
    },
    success:function(data){
      if(!grid.toolbarManager)
        return;
      if(!data||!data.length)
        return;
      var items=[];
      for(var i=0,l=data.length;i<l;i++){
        var o=data[i];
        items[items.length]={
          click:toolbarBtnItemClick,
          text:o.BtnName,
          img:rootPath+o.BtnIcon,
          id:o.BtnNo
        };
        items[items.length]={
          line:true
        };
      }
      grid.toolbarManager.set('items',items);
    }
  });
};

// 查找是否存在某一个按钮
LG.findToolbarItem=function(grid,itemID){
  if(!grid.toolbarManager)
    return null;
  if(!grid.toolbarManager.options.items)
    return null;
  var items=grid.toolbarManager.options.items;
  for(var i=0,l=items.length;i<l;i++){
    if(items[i].id==itemID)
      return items[i];
  }
  return null;
}

// 设置grid的双击事件(带权限控制)
LG.setGridDoubleClick=function(grid,btnID,btnItemClick){
  btnItemClick=btnItemClick||toolbarBtnItemClick;
  if(!btnItemClick)
    return;
  grid.bind('dblClickRow',function(rowdata){
    var item=LG.findToolbarItem(grid,btnID);
    if(!item)
      return;
    grid.select(rowdata);
    btnItemClick(item);
  });
}

// 设置grid的双击事件
LG.gridDblClick=function(grid,btnItemClick){
  grid.bind('dblClickRow',function(rowdata){
    var item=LG.findToolbarItem(grid);
    if(!item)
      return;
    grid.unselectAll();
    grid.select(rowdata);
    if(btnItemClick){
      btnItemClick(rowdata);
    }
  });
}

// 设置grid的toolbar的修改按钮事件
LG.gridModifyBtnClick=function(grid,btnItemClick){
  var selectedRow=grid.getSelected();
  if(!selectedRow){
    LG.tip('!请选择记录');
    return;
  }
  var selectedRows=grid.getSelectedRows();
  if(selectedRows.length==0){
    LG.tip('!请选择记录');
    return;
  }else if(selectedRows.length>1){
    LG.tip('!只能选择一条记录');
    return;
  }
  if(btnItemClick){
    btnItemClick(selectedRow);
  }
}
